package errors

//type ErrorCode struct {
//	Code     int                    `json:"code"`
//	HTTPCode int                    `json:"httpCode"`
//	Message  string                 `json:"message"`
//	Expose   bool                   `json:"-"`
//	Severity string                 `json:"-"`
//	Details  map[string]interface{} `json:"details,omitempty"`
//}
//
//// Embedding both ErrorCode and pkg/errors
//type Error struct {
//	*ErrorCode
//	pkgErr error
//}
//
//func (e *Error) Error() string {
//	if e.pkgErr != nil {
//		return e.pkgErr.Error()
//	}
//	return e.Message
//}
//
//// New creates a new Error with a message, wrapping it with pkg/errors for stack trace
//func New(code ErrorCode, message string) *Error {
//	return &Error{
//		ErrorCode: &code,
//		pkgErr:    pkgerrors.New(message),
//	}
//}
//
//// Wrap wraps an existing error with a message and an ErrorCode, preserving stack trace
//func Wrap(err error, code ErrorCode, message string) *Error {
//	return &Error{
//		ErrorCode: &code,
//		pkgErr:    pkgerrors.Wrap(err, message),
//	}
//}
//
//// Cause retrieves the original error
//func Cause(err error) error {
//	e, ok := err.(*Error)
//	if !ok {
//		return err
//	}
//	return pkgerrors.Cause(e.pkgErr)
//}
//
//// WithDetails adds details to an ErrorCode and returns it
//func (e *ErrorCode) WithDetails(details map[string]interface{}) *ErrorCode {
//	e.Details = details
//	return e
//}
